home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / ada / c01lab4.zip / LRMRDR / LRM_CODE.ZIP / MAKE_DAF.A < prev    next >
Text File  |  1992-05-01  |  4KB  |  122 lines

  1. -- Make_DAF by Rick Conn
  2. -- Scan Ada LRM Chapter Files and build Direct-Access Files of
  3. -- them.
  4.  
  5. -- COPYRIGHT NOTICE
  6. -- Ada LRM Reader - Interactive Presentation of the Ada LRM
  7. -- Copyright (C) 1992    Richard Conn
  8. --
  9. -- This program is free software; you can redistribute it
  10. -- and/or modify it under the terms of the GNU General Public
  11. -- License Version 1 as published by the Free Software
  12. -- Foundation.
  13. --
  14. -- This program is distributed in the hope that it will be
  15. -- useful, but WITHOUT ANY WARRANTY; without even the implied
  16. -- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  17. -- PURPOSE.  See the GNU General Public License for more
  18. -- details.  You should have received a copy of the GNU General
  19. -- Public License along with this program; if not, write to the
  20. -- Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
  21. -- 02139, USA.  See the ABOUT screens for further information,
  22. -- including information on how to contact the author.
  23.  
  24. with SYSDEP;
  25. with DAF_Handler;
  26. with Console;    -- CS Parts
  27. with Input_File; -- CS Parts
  28. procedure Make_DAF is
  29.  
  30.   FN_String_Length : constant := 10; -- length of file name string
  31.  
  32.   subtype FN_STRING is STRING(1..FN_String_Length);
  33.   type FN_VECTOR is array (NATURAL range <>) of FN_STRING;
  34.   File_Names : constant FN_VECTOR := (
  35.     "chap01.doc", "chap02.doc", "chap03.doc", "chap04.doc",
  36.     "chap05.doc", "chap06.doc", "chap07.doc", "chap08.doc",
  37.     "chap09.doc", "chap10.doc", "chap11.doc", "chap12.doc",
  38.     "chap13.doc", "chap14.doc", "chapaa.doc", "chapab.doc",
  39.     "chapac.doc", "chapad.doc", "chapae.doc", "chapaf.doc",
  40.     "chapco.doc", "chapfo.doc", "chaphe.doc", "chapin.doc",
  41.     "chappo.doc", "chapxx.doc"
  42.     );
  43.  
  44.   Max_Blank : constant := 3;  -- max number of blank lines in a row
  45.  
  46.   ----------------------------------------------------------------
  47.   function Is_Blank_Line (Item : in STRING) return BOOLEAN is
  48.  
  49.     Result : BOOLEAN := TRUE;
  50.  
  51.   begin -- Is_Blank_Line
  52.     for I in Item'RANGE loop
  53.       if Item(I) > ' ' then
  54.         Result := FALSE;
  55.         exit;
  56.       end if;
  57.     end loop;
  58.     return Result;
  59.   end Is_Blank_Line;
  60.  
  61.   ----------------------------------------------------------------
  62.   -- Convert the indicated file into a DAF file.
  63.   procedure Process_File (Name : in STRING) is
  64.  
  65.     Input_File_ID         : Input_File.FILE_TYPE;
  66.     Output_File_Name      : FN_STRING := "chapxx.daf";
  67.  
  68.     Inline      : STRING (1..SYSDEP.Max_String_Length);
  69.     Inlast      : NATURAL;
  70.  
  71.     Number_of_Consecutive_Blank_Lines : NATURAL := 0;
  72.  
  73.   begin -- Process_File
  74.  
  75.     -- open input file, create output file
  76.     Output_File_Name(1..6) := Name(1..6);
  77.     Console.Put_Line ("Processing File " & Name & " into " &
  78.                       Output_File_Name);
  79.     Input_File.Open (Input_File_ID, Name);
  80.     DAF_Handler.Create (Output_File_Name);
  81.  
  82.     -- loop to end of input text file
  83.     while not Input_File.End_of_File (Input_File_ID) loop
  84.  
  85.       -- get next line from input file and check for blank
  86.       Input_File.Get_Line (Input_File_ID, Inline, Inlast);
  87.       if Is_Blank_Line (Inline(1..Inlast)) then
  88.         Number_of_Consecutive_Blank_Lines :=
  89.           Number_of_Consecutive_Blank_Lines + 1;
  90.       else
  91.         Number_of_Consecutive_Blank_Lines := 0;
  92.       end if;
  93.  
  94.       -- add line to output file if not too many blank lines in a row
  95.       if Number_of_Consecutive_Blank_Lines <= Max_Blank then -- OK to print
  96.         DAF_Handler.Write (Inline(1..Inlast));
  97.       end if;
  98.  
  99.     end loop;
  100.  
  101.     -- Close files
  102.     Input_File.Close (Input_File_ID);
  103.     DAF_Handler.Close_Create;
  104.   exception
  105.     when others =>
  106.       Console.Put_Line ("Error on File " & Name);
  107.   end Process_File;
  108.  
  109. begin -- Make_DAF
  110.  
  111.   Console.Put_Line ("Direct Access File (DAF) Builder");
  112.   for I in SYSDEP.Intro_Copyright_Notice'RANGE loop
  113.     Console.Put_Line (SYSDEP.Intro_Copyright_Notice(I));
  114.   end loop;
  115.  
  116.   -- Build DAF files
  117.   for I in File_Names'RANGE loop
  118.     Process_File (File_Names(I));
  119.   end loop;
  120.  
  121. end Make_DAF;
  122.